《A new way to bring garbage collected programming languages efficiently to WebAssembly》
- 原文:《A new way to bring garbage collected programming languages efficiently to WebAssembly》
- 评分:⭐⭐⭐⭐⭐
- 标签: #wasm
纲要
- 主题:如何将 GC 语言移植到 Wasm
- 传统法:
- WasmGC 法
- 提案:允许定义结构数组,执行读取、写入、类型转换,由 Wasm VM 自己的 GC 实现管理
- 传统法(语言移植到架构),WasmGC(语言移植到虚拟机)
- 举例:
- J2CL(Java -> JavaScript)
- 所有编译为 JavaScript、JVM 和 CLR 的语言
- 注意:WasmGC 比其他语言虚拟机更加底层
- 对比
- 二进制体积:传统法大、WasmGC 法小
- 内存开销:传统法大、WasmGC 法小
- JavaScript-WASM 循环引用
- 传统法:无法细粒度控制
- WasmGC:可以,建立双向引用
- 堆栈上的 GC 引用
- WasmGC 可以在没有开销的情况下处理堆栈引用
- GC 效率:
- 传统法:复用运行时的优化
- WasmGC:服用 JavaScript GC 优化
- 各有优点
- 内存碎片
- WasmMVP:存在,线性内存操作导致碎片化,内存开销升高
- WasmGC:避免,VM 可以移动内存以压缩 GC 堆,避免碎片化
- 开发人员工具
- 传统法:不利于开发统一工具
- WasmGC:Chrome Profiler 可以按实例查看 Snapshot
- 成本
- 传统法:服用 C、C++、Rust 编译工具转 WASM
- WasmGC:WasmGC 移植需要大量的新代码
- Lua VM 编译为 WASM
- 传统法:几分钟搞定
- WasmGC:代码重构
- Google Sheets Calc Engine:
- 用于计算电子表格公式的 Java 代码库
- 已使用 J2CL 编译为 JavaScript
- V8 团队与 Sheets 和 J2CL 合作,将该代码移植到 WasmGC 中
- Demo
- reaching phase 4 at the W3C
- Chrome 119 正式支持 WasmGC
- Flutter 的 WasmGC Demo
- Dart compiled to WasmGC
- 如何入门 WasmGC:
- 支持 WasmGC 的工具链:Dart, Java (J2Wasm), Kotlin, OCaml (wasm_of_ocaml), and Scheme (Hoot).
- 底层 hello world:source code
- Binaryen wiki:documentation
- 其它
心得
WasmGC 是我期待已久的前沿技术,如今终于在 Chrome 119 上对外发布,是时候开始学起来了。
Dart 与 Flutter 看起来是这波浪潮的排头兵(由 Google 主导)。而 Dart 和 Flutter 正好是我的工作方向,缘分呐。
而且,我最近两年的工作,都在与编程语言、编译原理打交道,WasmGC 的出现,各种 GC 语言都需要重构以适配,广阔天地,大有可为。
现在还缺少一个脱离浏览器的、支持 WasmGC 的 Runtime,如果这个未来有了,移动端的玩法就全变了。
延伸阅读
本文作者:Maeiee
本文链接:《A new way to bring garbage collected programming languages efficiently to WebAssembly》
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!